package com.joolun.common.utils.uuid;

import java.security.SecureRandom;
import java.util.Base64;
import java.util.Random;

/**
 * ID生成器工具类
 * 
 * @author ruoyi
 */
public class IdUtils
{
    /**
     * 获取随机UUID
     * 
     * @return 随机UUID
     */
    public static String randomUUID()
    {
        return UUID.randomUUID().toString();
    }

    /**
     * 简化的UUID，去掉了横线
     * 
     * @return 简化的UUID，去掉了横线
     */
    public static String simpleUUID()
    {
        return UUID.randomUUID().toString(true);
    }

    /**
     * 获取随机UUID，使用性能更好的ThreadLocalRandom生成UUID
     * 
     * @return 随机UUID
     */
    public static String fastUUID()
    {
        return UUID.fastUUID().toString();
    }

    /**
     * 简化的UUID，去掉了横线，使用性能更好的ThreadLocalRandom生成UUID
     * 
     * @return 简化的UUID，去掉了横线
     */
    public static String fastSimpleUUID()
    {
        return UUID.fastUUID().toString(true);
    }

    public static String generateRandomKey(int length) {
        SecureRandom secureRandom = new SecureRandom();
        byte[] randomBytes = new byte[length];
        secureRandom.nextBytes(randomBytes);
        String base64Encoded = Base64.getEncoder().encodeToString(randomBytes);
        // 移除非字母和数字的字符
        String key = base64Encoded.replaceAll("[^a-zA-Z0-9]", "");
        // 截取指定长度
        return key.substring(0, length);
    }

    public static synchronized String get32UUID() {
        String uuid = java.util.UUID.randomUUID().toString();
        return uuid.replace("-", "");
    }

    public static  String get16UUID() {
        // 标准UUID去除连字符后为32位，截取前16位
        return UUID.randomUUID().toString().replace("-", "").substring(0, 16);
//        int hashCodeV = get32UUID().hashCode();
//        if(hashCodeV < 0) {//有可能是负数
//            hashCodeV = - hashCodeV;
//        }
//        // 0 代表前面补充0
//        // 4 代表长度为4
//        // d 代表参数为正数型
//        return generateRandomKey(6) + String.format("%010d", hashCodeV);
    }

}
